package com.example.myapplicationktkt2.adapter

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.myapplicationktkt2.R

/**
 * RecyclerView适配器类，用于展示列表数据
 *
 * @property items 列表数据项
 * @property onItemClick 列表项点击回调函数
 * @author [作者]
 * @since [版本]
 */
// RecyclerView 适配器
class SampleAdapter(
    private val items: List<String>,  // 数据列表，包含要显示的字符串项
    private val onItemClick: (String) -> Unit  // 点击项时的回调函数，接收被点击的字符串
) : RecyclerView.Adapter<SampleAdapter.ViewHolder>() {  // 继承自RecyclerView.Adapter，指定ViewHolder类型

    /**
     * ViewHolder类，用于持有列表项中的视图组件
     *
     * @property view 列表项根视图
     */
    // ViewHolder内部类，负责缓存列表项中的视图组件
    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val textView: TextView = view.findViewById(R.id.textView)  // 获取列表项中的文本视图组件
    }

    /**
     * 创建ViewHolder
     *
     * @param parent 父容器
     * @param viewType 视图类型
     * @return ViewHolder实例
     */
    // 创建并返回一个新的ViewHolder实例
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        // 从布局文件中创建视图
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_sample, parent, false)
        return ViewHolder(view)  // 使用创建的视图初始化并返回ViewHolder
    }

    /**
     * 绑定ViewHolder数据
     *
     * @param holder ViewHolder实例
     * @param position 数据项位置
     */
    // 将数据绑定到ViewHolder的视图上
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        // 设置文本视图的内容为当前数据项
        holder.textView.text = items[position]
        // 设置点击监听器，当项被点击时触发回调函数
        holder.itemView.setOnClickListener {
            onItemClick(items[position])
        }
    }

    /**
     * 获取数据项数量
     *
     * @return 数据项数量
     */
    // 返回数据项的总数量
    override fun getItemCount() = items.size
}
